define(function(require, exports, module) {
	var verifySet = {
		tel: /^1[34578]\d{9}$/,
		email: /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*$/i,
		password: /^[a-zA-Z0-9_]{6,16}$/
	};
	//身份证验证
	var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1];
	var ValideCode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2];

	function IdCardValidate(idCard) {
		idCard = trim(idCard.replace(/ /g, ""));
		if (idCard.length == 15) {
			return isValidityBrithBy15IdCard(idCard);
		} else if (idCard.length == 18) {
			var a_idCard = idCard.split(""); // 得到身份证数组   
			if (isValidityBrithBy18IdCard(idCard) && isTrueValidateCodeBy18IdCard(a_idCard)) {
				return true;
			} else {
				return false;
			}
		} else {
			return false;
		}
	}
	/**  
	 * 判断身份证号码为18位时最后的验证位是否正确
	 * @param a_idCard 身份证号码数组
	 * @return
	 */
	function isTrueValidateCodeBy18IdCard(a_idCard) {
		var sum = 0; // 声明加权求和变量   
		if (a_idCard[17].toLowerCase() == 'x') {
			a_idCard[17] = 10; // 将最后位为x的验证码替换为10方便后续操作   
		}
		for (var i = 0; i < 17; i++) {
			sum += Wi[i] * a_idCard[i]; // 加权求和   
		}
		valCodePosition = sum % 11; // 得到验证码所位置   
		if (a_idCard[17] == ValideCode[valCodePosition]) {
			return true;
		} else {
			return false;
		}
	}
	/**  
	 * 通过身份证判断是男是女
	 * @param idCard 15/18位身份证号码
	 * @return 0-女、1-男
	 */
	function maleOrFemalByIdCard(idCard) {
		idCard = trim(idCard.replace(/ /g, "")); // 对身份证号码做处理。包括字符间有空格。   
		if (idCard.length == 15) {
			if (idCard.substring(14, 15) % 2 == 0) {
				return 0;
			} else {
				return 1;
			}
		} else if (idCard.length == 18) {
			if (idCard.substring(14, 17) % 2 == 0) {
				return 0;
			} else {
				return 1;
			}
		} else {
			return null;
		}
	}

	/**  
	 * 验证18位数身份证号码中的生日是否是有效生日
	 * @param idCard 18位书身份证字符串
	 * @return
	 */
	function isValidityBrithBy18IdCard(idCard18) {
		var year = idCard18.substring(6, 10);
		var month = idCard18.substring(10, 12);
		var day = idCard18.substring(12, 14);
		var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
		var tempMonth = "",
			tempDate = "";

		if (temp_date.getMonth() + 1 < 10) {
			tempMonth = "0" + (temp_date.getMonth() + 1);
		} else {
			tempMonth = temp_date.getMonth() + 1;
		}
		if (temp_date.getDate() < 10) {
			tempDate = "0" + temp_date.getDate();
		} else {
			tempDate = temp_date.getDate()
		}

		if (temp_date.getFullYear() != parseFloat(year) || temp_date.getMonth() != parseFloat(month) - 1 || temp_date.getDate() != parseFloat(day)) {
			return {
				isValidityBrith: false,
				date: temp_date.getFullYear() + "-" + tempMonth + "-" + tempDate
			};
		} else {
			return {
				isValidityBrith: true,
				date: temp_date.getFullYear() + "-" + tempMonth + "-" + tempDate
			};
		}
	}
	/**  
	 * 验证15位数身份证号码中的生日是否是有效生日
	 * @param idCard15 15位书身份证字符串
	 * @return
	 */
	function isValidityBrithBy15IdCard(idCard15) {
		var year = idCard15.substring(6, 8);
		var month = idCard15.substring(8, 10);
		var day = idCard15.substring(10, 12);
		var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));

		var tempMonth = "",
			tempDate = "";

		if (temp_date.getMonth() + 1 < 10) {
			tempMonth = "0" + (temp_date.getMonth() + 1);
		} else {
			tempMonth = temp_date.getMonth() + 1;
		}
		if (temp_date.getDate() < 10) {
			tempDate = "0" + temp_date.getDate();
		} else {
			tempDate = temp_date.getDate()
		}
		  
		if (temp_date.getYear() != parseFloat(year) || temp_date.getMonth() != parseFloat(month) - 1 || temp_date.getDate() != parseFloat(day)) {
			return {
				isValidityBrith: false,
				date: temp_date.getFullYear() + "-" + tempMonth + "-" + tempDate
			};
		} else {
			return {
				isValidityBrith: true,
				date: temp_date.getFullYear() + "-" + tempMonth + "-" + tempDate
			};
		}
	}

	function trim(str) {
		return str.replace(/(^\s*)|(\s*$)/g, "");
	}
	verifySet.card = {
		isIdCard: function(str) {
			return IdCardValidate(str);
		},
		getSex: function(str) {
			return maleOrFemalByIdCard(str);
		},
		getBrith: function(str, length) {
			return length == 15 ? isValidityBrithBy15IdCard(str) : isValidityBrithBy18IdCard(str)
		}
	}
	module.exports = verifySet;
});